package com.faithbj.freemarker;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;

public class DocUtil {
	private Configuration configure = null;
	private String charset = "utf-8";
	private String templateDir = "src/template";

	public DocUtil() {
		this.configure = new Configuration();
		this.configure.setDefaultEncoding(this.charset);
	}

	/**
	 * 根据Doc模板生成word文件
	 * @param dataMap 需要填入模板的数据
	 * @param printType 要生成打印文件的模板名称（不带文件后缀）
	 * @param savePath 生成的doc文件保存路径
	 */
	public void createDoc(Map<String, Object> dataMap, String printType,
			String savePath) {
		try {
			// 加载需要装填的模板
			Template template = null;
			// 加载模板文件
//			this.configure.setClassForTemplateLoading(this.getClass(), D:/work/tmp");
			this.configure.setDirectoryForTemplateLoading(new File(this.templateDir));
			// 设置对象包装器
			this.configure.setObjectWrapper(new DefaultObjectWrapper());
			// 设置异常处理器
			this.configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
			// 定义Template对象,注意模板类型名字与downloadType要一致
			template = this.configure.getTemplate(printType+".xml");
			// 输出文档
			File outFile = new File(savePath);
			Writer out = null;
			out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(outFile), this.charset));
			template.process(dataMap, out);
			outFile.delete();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
